Os pacotes necessários para reprodução dos códigos deste capítulo são carregados com a seguinte instrução:
pcks <- c(
#"lubridate", "stringr",
"tidyverse", "lattice", "psych", "grid"
# "ggplot2", "gcookbook", "pander",
#"R.utils", "magrittr",
)
easypackages::libraries(pcks)
#> Loading required package: tidyverse
#> + ggplot2 2.2.1 Date: 2018-07-16
#> + tibble 1.4.2 R: 3.4.4
#> + tidyr 0.8.1 OS: Ubuntu 14.04.5 LTS
#> + readr 1.1.1 GUI: X11
#> + purrr 0.2.5 Locale: en_US.UTF-8
#> + dplyr 0.7.5 TZ: UTC
#> + stringr 1.3.1
#> + forcats 0.3.0
#> ── Conflicts ────────────────────────────────────────────────────
#> * filter(), from dplyr, masks stats::filter()
#> * lag(), from dplyr, masks stats::lag()
#> Loading required package: lattice
#> Loading required package: psych
#>
#> Attaching package: 'psych'
#> The following objects are masked from 'package:ggplot2':
#>
#> %+%, alpha
#> Loading required package: grid
#> All packages loaded successfully
x1 <- seq(from = -100, to = 100, by = 0.05)
A <- seq(from = -1,
to = 1,
length.out = length(x1)
) %>%
sin(x = .)
y1 <- exp(-0.07 * A * x1) * cos(x1 + pi / 2)
dados <- tibble(x1, y1)
head(dados)
#> # A tibble: 6 x 2
#> x1 y1
#> <dbl> <dbl>
#> 1 -100 -0.00140
#> 2 -100.0 -0.00153
#> 3 -99.9 -0.00165
#> 4 -99.8 -0.00177
#> 5 -99.8 -0.00188
#> 6 -99.8 -0.00199
#help(airquality)
head(airquality)
#> Ozone Solar.R Wind Temp Month Day
#> 1 41 190 7.4 67 5 1
#> 2 36 118 8.0 72 5 2
#> 3 12 149 12.6 74 5 3
#> 4 18 313 11.5 62 5 4
#> 5 NA NA 14.3 56 5 5
#> 6 28 NA 14.9 66 5 6
# conversão da Temp de Farenheith para Celsius
aq <- airquality %>%
mutate(Temp = (Temp - 32)/5,
# adicionando coluna date criada das colunas Day e Month
# o ano das medidas é 1973, conforme help
date = as.Date(
paste(Day, Month, "1973"),
format = "%d %m %Y")
) %>%
# removendo as colunas Month e Day e reordenando as colunas
dplyr::select(., date, Ozone:Temp, -c(Month, Day))
head(aq)
#> date Ozone Solar.R Wind Temp
#> 1 1973-05-01 41 190 7.4 7.0
#> 2 1973-05-02 36 118 8.0 8.0
#> 3 1973-05-03 12 149 12.6 8.4
#> 4 1973-05-04 18 313 11.5 6.0
#> 5 1973-05-05 NA NA 14.3 4.8
#> 6 1973-05-06 28 NA 14.9 6.8
# matriz de dados para 5 plots
# semente para reprodutibilidade
set.seed(12)
# laço para gerar uma matriz de 5 colunas
# com números aleatórios acumulados
mat <- sapply(1:5, function(i) cumsum(rnorm(100)))
head(as.data.frame(mat))
#> V1 V2 V3 V4 V5
#> 1 -1.48056759 1.926719 -2.986456 -1.481392 0.08712577
#> 2 0.09660188 1.978149 -3.037003 -2.411725 -1.28105859
#> 3 -0.86014260 3.778673 -1.737490 -3.428340 -2.67114205
#> 4 -1.78014785 3.227215 -3.088892 -3.640028 -2.36587429
#> 5 -3.77778995 3.334274 -4.038690 -1.987162 -2.21050291
#> 6 -4.05008599 4.123398 -2.352589 -1.261865 -1.99605084
# importando dados
prec <- readRDS("data/PrecAccInmet_61_90.rds")
head(prec)
#> codigo nome estado mes value
#> 1 82704 Cruzeiro do Sul AC jan 257.9
#> 2 82915 Rio Branco AC jan 289.0
#> 3 82807 Tarauacá AC jan 286.6
#> 4 83098 Coruripe AL jan 21.6
#> 5 82994 Maceió AL jan 78.1
#> 6 82988 Mata Grande AL jan 62.1
## dados rain
rain <- read.csv(file = "data/cityrain.csv", head = T)
head(rain)
#> Month Tokyo NewYork London Berlin
#> 1 Jan 49.9 83.6 48.9 42.4
#> 2 Feb 71.5 78.8 38.8 33.2
#> 3 Mar 106.4 98.5 39.3 34.5
#> 4 Apr 129.2 93.4 42.4 39.7
#> 5 May 144.0 106.0 47.0 52.6
#> 6 Jun 176.0 84.5 48.3 70.5
data(climate, package = "gcookbook")
#help(climate,package = "gcookbook")
head(climate)
#> Source Year Anomaly1y Anomaly5y Anomaly10y Unc10y
#> 1 Berkeley 1800 NA NA -0.435 0.505
#> 2 Berkeley 1801 NA NA -0.453 0.493
#> 3 Berkeley 1802 NA NA -0.460 0.486
#> 4 Berkeley 1803 NA NA -0.493 0.489
#> 5 Berkeley 1804 NA NA -0.536 0.483
#> 6 Berkeley 1805 NA NA -0.541 0.475
O R possui uma poderosa plataforma de ferramentas gráficas para análise e visualização de dados. Os sistemas gráficos são:
plot();sessionInfo() para verificar nas informações de sua sessão os pacotes carregados, demo("graphics")para ver mais exemplos de gráficos e library(help = "graphics") para visualizar a lista de funções desse pacote.# lista de funções do pacote graphics da base do R
library(help = "graphics")
# vários exemplos para demonstração de diferentes gráficos
demo("graphics")
Um exemplo simples de uso da função graphics::plot() é mostrado abaixo:
with(
dados,
plot(x = x1, y = y1)
)
Para ilustrar os diferentes sistemas gráficos disponíveis no R, vamos mostrar como gerar este mesmo gráfico usando o sistema grid, lattice e ggplot2.
library(grid))## exemplo grid
library(grid)
## define tamanho da região para plot (viewport)
pushViewport(plotViewport(c(5, 4, 2, 2)))
## define intervalos de variação das escalas x e y
pushViewport(dataViewport(xData = dados$x1,
yData = dados$y1,
name = "plotRegion"))
## retângulo em torno da região do plot
grid.rect()
## eixos x e y
grid.xaxis()
grid.yaxis()
## labels dos eixos x e y
grid.text("x1",y = unit(-3,"lines"))
grid.text("y1",x = unit(-3,"lines"),rot=90)
## símbolos dos dados
grid.points(x = dados$x1, y = dados$y1, name="dataSymbols")
# exemplo lattice
library(lattice)
xyplot(y1 ~ x1, data = dados)
## exemplo ggplot2
library(ggplot2)
qplot(x = x1,y = y1, data = dados)
# exemplo função gráfica de alto nível
plot(x1, y1, las = 1)
# exemplo função gráfica de alto nível
plot(x1, y1, las = 1)
# exemplo funções gráficas de baixo nível
points(x1, y1, # adiciona pontos com cor e símbolo
col = 2, # cor do ponto
pch = 20, # tipo (círculo preenchido)
cex = 0.8) # tamanho relativo do símbolo (default =1)
grid() # adiciona linhas de grade
abline(h = 0,col = "gray") # linhade referência (y = 0)
title(main = "Grafico a partir de funçoes de baixo nível") # adiciona título ao gráfico
box(lwd = 2) # adiciona retângulo em torna da região do gráfico, com linha mais larga
Ambos sistemas base e grid fornecem funções gráficas de baixo nível. O sistema grid também oferece funções para interação com os gráficos de saída (como a edição, extração, remoção de partes de uma imagem). A Maioria das funções em pacotes gráficos produz gráficos completos e geralmente oferecem gráficos específicos para um tipo de análise ou campo de estudo.
Nesta aula será dado foco a produção de gráficos usando o sistema base do R.
plot()A função plot() é o carro chefe do sistema base do R. Quando especificamos apenas uma variável de entrada é plotado a variável no eixo y em função de seu tamanho 1:length(x) no eixo x.
plot(y1)
Gerando um gráfico especificando os parâmetros x e y.
plot(x = x1, y = y1)
Também podemos especificar no primeiro argumento da plot() uma fórmula, p.ex.: y1 ~ x1 que pode ser interpretada como y1 (variável) em função x1.
plot(y1 ~ x1)
Aplicando a plot() a um data.frame com duas variáveis resulta um gráfico equivalente ao caso anterior.
plot(dados)
Aplicando a plot() a um data.frame com mais de duas variáveis resulta um gráfico de dispersão entre todas as variáveis do dataframe.
## plot de todas colunas de aq, exceto a 1a coluna
plot(aq[, -1])
Cada gráfico desses é chamado de gráfico de dispersão. Através dele pode-se visualizar a relação entre duas variáveis. Nesse caso o gráfico resultante é uma matriz de gráficos de dispersão.
Existe uma função gráfica específica para produção deste tipo de gráfico: a função pairs().
# plote de pares
pairs(aq[, -1]) # exclui coluna date
A função pairs.panels() do pacote psych fornece um gráfico de pares bastante informativo e foi expandida a partir da função pairs().
pairs.panels(x = aq[, -1])
Para fechar as janelas gráficas abertas:
graphics.off()
Podemos personalisar muitas características de um gráfico (cores, eixos, títulos) através de opções chamadas parametros gráficos.
As opções são especificadas através da função par(). Os parâmetros assim definidos terão efeito até o fim da sessão ou até que eles sejam mudados.
Digitando par() sem parâmetros produz uma lista das configurações gráficas atuais. Adicionando o parâmetro no.readonly=TRUE produz uma lista das configurações atuais que podem ser modificadas posteriormente.
str(par())
#> List of 72
#> $ xlog : logi FALSE
#> $ ylog : logi FALSE
#> $ adj : num 0.5
#> $ ann : logi TRUE
#> $ ask : logi FALSE
#> $ bg : chr "white"
#> $ bty : chr "o"
#> $ cex : num 1
#> $ cex.axis : num 1
#> $ cex.lab : num 1
#> $ cex.main : num 1.2
#> $ cex.sub : num 1
#> $ cin : num [1:2] 0.15 0.2
#> $ col : chr "black"
#> $ col.axis : chr "black"
#> $ col.lab : chr "black"
#> $ col.main : chr "black"
#> $ col.sub : chr "black"
#> $ cra : num [1:2] 28.8 38.4
#> $ crt : num 0
#> $ csi : num 0.2
#> $ cxy : num [1:2] 0.026 0.0633
#> $ din : num [1:2] 7 5
#> $ err : int 0
#> $ family : chr ""
#> $ fg : chr "black"
#> $ fig : num [1:4] 0 1 0 1
#> $ fin : num [1:2] 7 5
#> $ font : int 1
#> $ font.axis: int 1
#> $ font.lab : int 1
#> $ font.main: int 2
#> $ font.sub : int 1
#> $ lab : int [1:3] 5 5 7
#> $ las : int 0
#> $ lend : chr "round"
#> $ lheight : num 1
#> $ ljoin : chr "round"
#> $ lmitre : num 10
#> $ lty : chr "solid"
#> $ lwd : num 1
#> $ mai : num [1:4] 1.02 0.82 0.82 0.42
#> $ mar : num [1:4] 5.1 4.1 4.1 2.1
#> $ mex : num 1
#> $ mfcol : int [1:2] 1 1
#> $ mfg : int [1:4] 1 1 1 1
#> $ mfrow : int [1:2] 1 1
#> $ mgp : num [1:3] 3 1 0
#> $ mkh : num 0.001
#> $ new : logi FALSE
#> $ oma : num [1:4] 0 0 0 0
#> $ omd : num [1:4] 0 1 0 1
#> $ omi : num [1:4] 0 0 0 0
#> $ page : logi TRUE
#> $ pch : int 1
#> $ pin : num [1:2] 5.76 3.16
#> $ plt : num [1:4] 0.117 0.94 0.204 0.836
#> $ ps : int 12
#> $ pty : chr "m"
#> $ smo : num 1
#> $ srt : num 0
#> $ tck : num NA
#> $ tcl : num -0.5
#> $ usr : num [1:4] 0 1 0 1
#> $ xaxp : num [1:3] 0 1 5
#> $ xaxs : chr "r"
#> $ xaxt : chr "s"
#> $ xpd : logi FALSE
#> $ yaxp : num [1:3] 0 1 5
#> $ yaxs : chr "r"
#> $ yaxt : chr "s"
#> $ ylbias : num 0.2
# cópia das configurações atuais
old_par <- par(no.readonly = TRUE)
# tipo de linha pontilhada, largura da linha, símbolo para plot (triângulo sólido)
par(lty = 3, pch = 17)
with(
aq,
plot(
x = date,
y = Wind,
type = "b"
)
) # linha e ponto desconectados
# restabelecendo parâmetros originais
par(old_par)
Podemos definir par() quantas vezes forem necessárias.
A segunda forma de especificar parâmetros é nome_opção = valor diretamente na função gráfica de alto nível.
Mas nesse caso, as opções terão efeito (local) apenas para aquele gráfico específico , portanto diferindo da primeira forma em que a definição pode ser para toda sessão (global).
Poderíamos gerar o mesmo gráfico anterior da seguinte forma:
with(
aq,
plot(
x = date,
y = Wind,
type = "b",
lty = 3,
pch = 17
)
)
Nem todas funções de alto nível permitem especificar todos parâmetros gráficos. Veja o help(plot) para determinar quais parâmetros gráficos podem configurados dessa forma.
?plot
A seguir veremos alguns importantes parâmetros gráficos que podemos configurar.
Vimos que podemos especificar símbolos e linhas nos gráficos. Os parâmetros relevantes para essas opções são mostradas na tabela a seguir.
| Parâmetro | Descrição |
|---|---|
| pch | define o símbolo a ser usado para pontos |
| cex | tamanho do símbolo, cex é um nº indicando a quantidade pela qual símbolos devem ser relativos, Default = 1, 1.5 é 50 % maior, 0.5 é 50 % menor. |
| lty | tipo de linha |
| lwd | largura da linha, expresso em relação ao default (=1), então lwd = 2 gera uma linha com o dobro de largura da linha default. |
# plot(c(-1, 26), 0:1, type = "n", axes = FALSE, xlab = "", ylab = "")
# text(0:25, 0.6, c(0:25), cex = 1)
# points(0:25, rep(0.4, 26), pch = 0:25, bg = "grey")
# mtext(text = "pch = ", side = 1, line = -14.5, cex = 2)
# mtext(text = "símbolo", side = 1, line = -10.5, cex = 2)
pchShow <-
function(extras = c("*", ".", "o", "O", "0", "+", "-", "|", "%", "#"),
cex = 3, ## good for both .Device=="postscript" and "x11"
col = "red3", bg = "gold", coltext = "brown", cextext = 1.2,
main = paste(
"Símbolos: points(..., pch = *, cex =",
cex, ")"
)) {
nex <- length(extras)
np <- 26 + nex
ipch <- 0:(np - 1)
k <- floor(sqrt(np))
dd <- c(-1, 1) / 2
rx <- dd + range(ix <- ipch %/% k)
ry <- dd + range(iy <- 3 + (k - 1) - ipch %% k)
pch <- as.list(ipch) # list with integers & strings
if (nex > 0) pch[26 + 1:nex] <- as.list(extras)
plot(rx, ry, type = "n", axes = FALSE, xlab = "", ylab = "", main = main)
abline(v = ix, h = iy, col = "lightgray", lty = "dotted")
for (i in 1:np) {
pc <- pch[[i]]
## 'col' symbols with a 'bg'-colored interior (where available) :
points(ix[i], iy[i], pch = pc, col = col, bg = bg, cex = cex)
if (cextext > 0) {
text(ix[i] - 0.3, iy[i], pc, col = coltext, cex = cextext)
}
}
}
pchShow()
As opções de tipo de linha são mostradas abaixo.
# linhas
op <- par(lwd = 3,
cex = 1.5,
cex.axis = 1,
cex.lab = 1,
font = 2,
font.axis = 2,
font.lab = 2)
plot(
x = c(0, 10),
y = c(1, 6),
type = "n",
xlab = "",
ylab = "",
main = "Amostra de tipo de linhas",
axes = FALSE,
frame.plot = FALSE
)
axis(
side = 2,
lwd = 3,
at = seq(1, 6, by = 1),
cex = 1.25,
font = 2,
col = "white"
)
mtext(
"Nº do tipo de linha (lty = )",
side = 2,
line = 2,
cex = 1.5,
font = 2
)
abline(h = 1:6, lty = 1:6)
par(op)
Exemplo com as opções.
with(
aq,
plot(
x = date,
y = Temp,
type = "b",
lty = 3,
pch = 15,
cex = 2
)
)
Há diversos parâmetros relacionados a cores no R. A tabela abaixo mostra os mais comuns.
| Parâmetro | Descrição |
|---|---|
col |
cor default do gráfico. Algumas funções como lines() e pie() aceitam um vetor de cores que são recicladas |
col.axis |
cor do texto (título) nos eixos |
col.lab |
cor dos rótulos dos eixos |
col.main |
cor do texto do título do gráfico |
col.sub |
cor do sub-título |
fg |
cor do primeiro plano |
bg |
cor do plano de fundo |
Podemos especificar as cores no R por índice, nome, hexadecimal, RGB ou HSV. Por exemplo col = 0, col = "white", col =FFFFF, col = rgb(1,1,1) e col = hsv(1,1,1) são formas equivalentes de especificar a cor branca.
A função colors() retorna o nome de todas as cores disponíveis.
colors()[1:20]
#> [1] "white" "aliceblue" "antiquewhite" "antiquewhite1"
#> [5] "antiquewhite2" "antiquewhite3" "antiquewhite4" "aquamarine"
#> [9] "aquamarine1" "aquamarine2" "aquamarine3" "aquamarine4"
#> [13] "azure" "azure1" "azure2" "azure3"
#> [17] "azure4" "beige" "bisque" "bisque1"
n <- length(colors())
op <- par(bg = "gray60")
plot(
dados$x1[1:n], dados$y1[1:n],
type = "n",
xlab = "x",
ylab = "y",
main = "Várias cores",
sub = "Onda colorida",
col.axis = "green",
col.lab = "green",
col.axis = "yellow",
col.sub = "red"
)
usr <- par("usr")
rect(usr[1], usr[3], usr[2], usr[4], col = "snow", border = "black", lwd = 2)
points(
dados$x1[1:n], dados$y1[1:n],
col = colors()[1:n],
pch = 20,
cex = (1:n) / 60 * 4
)
par(op)
Para visualizar as cores e os nomes associados a cada uma veja http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf.
O R também possui diversas funções para criar vetores de cores contínuas (paletas):
plot(
x = dados$x1[1:n],
y = dados$y1[1:n],
type = "p",
xlab = "x",
ylab = "y",
main = "Várias cores",
sub = "Onda colorida",
col = rainbow(n), # função para paleta arco-íris
pch = 20,
cex = (1:n) / 60 * 4
)
plot(
x = dados$x1[1:n],
y = dados$y1[1:n],
type = "p",
xlab = "x",
ylab = "y",
main = "Várias cores",
sub = "Onda colorida",
col = heat.colors(n), # paleta com cores quentes
pch = 20,
cex = (1:n) / 60 * 4
)
plot(
x = dados$x1[1:n],
y = dados$y1[1:n],
type = "p",
xlab = "x",
ylab = "y",
main = "Várias cores",
sub = "Onda colorida",
col = terrain.colors(n), # paleta terreno
pch = 20,
cex = (1:n) / 60 * 4
)
plot(
x = dados$x1[1:n],
y = dados$y1[1:n],
type = "p",
xlab = "x",
ylab = "y",
main = "Várias cores",
sub = "Onda colorida",
col = topo.colors(n), # paleta topografia
pch = 20,
cex = (1:n) / 60 * 4
)
plot(
x = dados$x1[1:n],
y = dados$y1[1:n],
type = "p",
xlab = "x",
ylab = "y",
main = "Várias cores",
sub = "Onda colorida",
col = cm.colors(n),
pch = 20,
cex = (1:n) / 60 * 4
)
Parâmetros especificando tamanho do texto.
| Parâmetro | Descrição |
|---|---|
| cex | nº indicando a quantidade pela qual o texto plotado deve ser escalonado em relação ao default (=1). |
| cex.axis | magnificação do texto dos eixos (títulos). |
| cex.lab | magnificação dos rótulos em relação ao cex. |
| cex.main | magnificação dos títulos em relação ao cex. |
| cex.sub | cor do sub-título |
Parâmetros especificando família, tamanho e estilo da fonte.
| Parâmetro | Descrição |
|---|---|
| font | inteiro especificando a fonte a ser usada. 1 = normal, 2 = negrito, 3 = itálico, 4 = negrito e itálico, 5 = símbolo (adobe) |
| font.axis | fonte para o texto do eixo |
| font.lab | fonte para o rótulo do eixo |
| font.main | fonte para o título |
| font.sub | fonte para o sub-título |
| ps | tamanho do ponto da fonte (ps = 1/72 *cex) |
| family |
op <- par(font.lab = 3, cex.lab = 2, font.main = 4, cex.main = 2)
plot(dados$x1[1:n], dados$y1[1:n],
type = "p",
xlab = "x",
ylab = "y",
main = "Várias cores",
sub = "Onda colorida",
col = gray.colors(n),
pch = 20,
cex = (1:n)/60 * 4)
par(op)
Até aqui já vimos como criar gráficos de dispersão com a função plot(). Mas existe uma ampla variedade de gráficos, além daqueles: boxplots, histogramas, gráficos de barra, gráficos de pizza, gráficos de imagens, gráficos 3D. Alguns exemplos são mostrados a seguir.
# gráfico de barras
barplot(
height = BOD$demand,
names.arg = BOD$Time,
col = 1
)
# gráfico de uma tabela de contagem
barplot(height = table(mtcars$cyl))
# histograma
hist(x = mtcars$mpg)
# Especificando o número aproximado de classes com parâmetro breaks
hist(x = mtcars$mpg, breaks = 10)
# boxplots
# boxplot de todas colunas
boxplot(aq[, -1])
# usando formula
boxplot(Temp ~ Month, data = airquality)
# Curvas
curve(x ^ 3 - 5 * x, from = -4, to = 4)
# plot de uma função criada
minhafun <- function(xvar) {
1 / (1 + exp(-xvar + 10))
}
curve(minhafun(x), from = 0, to = 20)
# Add a line:
curve(1 - minhafun(x), add = TRUE, col = "red")
# Imagem
dim(volcano)
#> [1] 87 61
x <- 10 * (1:nrow(volcano))
y <- 10 * (1:ncol(volcano))
image(
x,
y,
volcano,
col = terrain.colors(100),
axes = FALSE
)
contour(
x,
y,
volcano,
levels = seq(90, 200, by = 5),
add = TRUE,
col = "peru"
)
axis(1, at = seq(100, 800, by = 100))
axis(2, at = seq(100, 600, by = 100))
box()
title(
main = "Maunga Whau Volcano",
font.main = 4
)
Para gerar gráficos vamos primeiro abrir uma tela gráfica, plotar os dados e então fechar a tela gráfica.
# abre uma tela gráfica fora do ambiente do RStudio
x11()
# plot de uma variável
plot(y1)
# fechando tela gráfica
dev.off()
plot(y1)
Vamos gerar 5 gráficos e apága-los de uma vez só.
# plotando cada coluna da matriz mat em uma nova tela gráfica
sapply(
1:ncol(mat),
FUN = function(i) {
x11() # abrindo tela gráfica para plot
# plot da variável de cada coluna da matriz
plot(
mat[, i],
type = "l",
col = 4,
main = paste("Gráfico", i)
)
abline(h = 0) # linha de referência em x = 0
return(i)
}
) # fim do apply
Para apagar todas as telas gráficas abertas de uma vez só usa-se a função graphics.off().
graphics.off()
O R pode exportar um gráfico para diferentes saídas gráficas (png, pdf, ps, jpeg e etc). Uma lista completa das opções disponíveis está disponível em ?device.
plot(y1)
Vamos usar o exemplo da matriz mat para salvar os gráficos das variáveis em cada coluna em um único arquivo pdf.
## fechando qualquer tela gráfica aberta
graphics.off()
## abrindo saída gráfica
pdf(
file = file.path(tempdir(), "5plots1file.pdf"),
onefile = TRUE,
width = 7,
height = 4
)
## looping em cada coluna da matriz mat
sapply(
1:ncol(mat),
## Função para plot da variável na coluna i
FUN = function(i) {
## mostra tela o índice do looping em execução
cat(i, "\n")
## plot da variável de cada coluna da matriz
plot(
mat[, i],
type = "l",
col = 4,
main = paste("Gráfico", i)
)
abline(h = 0) ## linha de referência em x = 0
return(i)
}
) ## fim do apply
## fechando pdf
dev.off()
Para salvar cada gráfico em um arquivo a chamada da função grDevices::pdf() deve ser feita antes de cada gráfico.
## fechando qualquer tela gráfica aberta
graphics.off()
## looping em cada coluna da matriz mat
sapply(
1:ncol(mat),
## Função para plot da variável na coluna i
FUN = function(i) {
## mostra tela o índice do looping em execução
cat(i, "\n")
## criando nome do arquivo
arquivo <- file.path(tempdir(),paste("plot", i, "file", i, ".pdf", sep = ""))
## abrindo saída gráfica
pdf(file = arquivo, onefile = TRUE, width = 7, height = 4)
# plot da variável de cada coluna da matriz
plot(mat[, i],
type = "l",
col = 4,
main = paste("Gráfico", i))
# linha de referência em x = 0
abline(h = 0)
## fechando pdf
dev.off()
return(i)
}
) # fim do looping
par(mfrow = c(2, 3))
plot(x = aq$date,
y = aq$Ozone,
type = "o") # linha e ponto conectados
plot(x = aq$date,
y = aq$Temp,
type = "l") # linha
plot(x = aq$date,
y = aq$Wind,
type = "b") # linha e ponto desconectados
plot(x = aq$date,
y = aq$Solar.R,
type = "h")
plot(x = aq$date,
y = (aq$Ozone) ^ 1 / 3,
type = "o") # linha e ponto
plot(1:10,
1:10,
type = "n",
frame = F,
axes = F,
xlab = "",
ylab = "")
text(5, 5, "Gráficos \n em uma \n página", cex = 3)
#par()
plot(
x = aq$date,
y = aq$Ozone,
type = "l",
lwd = 2,
ylab = "",
xlab = "Data"
)
par(new = T)
plot(
x = aq$date,
y = aq$Temp,
type = "l",
col = 2,
lwd = 2,
axes = FALSE,
ylab = "",
xlab = ""
)
axis(
side = 4,
col = 2,
col.axis = 2
)
mtext(
text = "Ozônio",
line = -2,
adj = 0.2
)
mtext(
text = "Temp",
col = 2,
line = -1,
adj = 0.2
)
plot(
rain$Tokyo,
type = "l",
col = "red",
ylim = c(0, 300),
main = "Chuva mensal em grandes cidades",
xlab = "Mês do ano",
ylab = "Chuva (mm)",
lwd = 2
)
lines(
rain$NewYork,
type = "l",
col = "blue",
lwd = 2
)
lines(
rain$London,
type = "l",
col = "green",
lwd = 2
)
lines(
rain$Berlin,
type = "l",
col = "orange",
lwd = 2
)
## legenda
legend(
"topright",
legend = c("Tokyo", "NewYork", "London", "Berlin"),
col = c("red", "blue", "green", "orange"),
lty = 1,
lwd = 2,
bty = "n"
)